<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>计算属性</title>
</head>

<body>
    <script src="/js/vue.js"></script>
    <div id="app">
        <!-- 1. 拼接语法，语法繁琐，不要用 -->
        <p>{{lastName}} {{firstName}}</p>
        <p>{{lastName}} {{firstName}}</p>
        <p>{{lastName}} {{firstName}}</p>
        <p>{{lastName}} {{firstName}}</p>
        <p>{{lastName}} {{firstName}}</p>
        <br>
        <!-- 2. 通过定义methods调用，入股每一次循环多次，效率低 -->
        <p>{{getFullName()}}</p>
        <p>{{getFullName()}}</p>
        <p>{{getFullName()}}</p>
        <p>{{getFullName()}}</p>
        <p>{{getFullName()}}</p>
        <br>
        <!-- 3. 通过computed计算属性，有缓存，调用多次时候，性能最好 -->
        <p>{{fullName}}</p>
        <p>{{fullName}}</p>
        <p>{{fullName}}</p>
        <p>{{fullName}}</p>
        <p>{{fullName}}</p>
        <!-- 4. 通过生命周期函数去进行计算要注意渲染的时机 -->



    </div>

    <script>
        let app = new Vue({
            el: "#app",
            data: {
                msg: 'hello world',
                firstName: "Shane",
                lastName: "He"
            },
            methods: {
                getFullName() {
                    return this.firstName + " " + this.lastName
                }
            },
            // 计算属性
            computed: {
                // 在一个computed计算属性里可以完成各种复杂的逻辑处理，包括运算、函数调用等，处理完成后最终返回一个结果
                // 传函数
                // 起名字的时候，尽可能按属性名，增加代码的可读性
                // 看起来是函数，但可以把他当属性去用，在python中有个语法糖@property 与之相似
                fullName() {
                    return this.firstName + " " + this.lastName
                }

            }
        })
    </script>
</body>

</html>